TSOData
TSOData_datadefinition.dat is an interesting file which appears to define many (or all?) of the DBRequestWrapperPDU/DataServiceWrapperPDU request/response bodies and provides names to all of the fields. The file is used by TSODataServiceClientD.dll in every version of the game, however, the code for reading the request/response bodies is hardcoded in DBAppServiceClient.dll which does not use this file (e.g. the code for reading the LoadAvatarByID response body is located at DBAppServiceClientD_base+0x2f4a0, and it does a series of "read dword", "read string", etc. calls). The RTTI for EA-Land's version of TSODataServiceClientD.dll also mimics some of the contents of this file. All integers are little-endian. Its format is as follows: * Timestamp - A 4-byte Unix timestamp specifying the time that this file was generated * 1st-level struct count - A 4-byte unsigned integer specifying the number of 1st-level structs * 1st-level structs - For each 1st-level struct: ** Name string ID - A 4-byte unsigned integer specifying the string ID of a string that represents the name of this struct ** Field count - A 4-byte unsigned integer specifying the number of fields defined for this struct ** Fields - For each field: *** Name string ID - A 4-byte unsigned integer specifying the string ID of a string that represents the name of this field *** Classification - 1 byte with a value between 0 and 2 (inclusive), corresponding to the table below: *** Type string ID - A 4-byte unsigned integer specifying the string ID of a string that represents the type of this field (e.g. "bool", "Uint32", "string") * 2nd-level struct count - A 4-byte unsigned integer specifying the number of 2nd-level structs * 2nd-level structs - The 2nd-level structs follow the same format as the 1st-level structs but may also declare fields with 1st-level struct types * Derived struct count - A 4-byte unsigned integer specifying the number of derived structs * Derived structs - For each derived struct: ** Derived struct string ID - A 4-byte unsigned integer specifying the string ID of the name of this derived struct ** Parent struct string ID - A 4-byte unsigned integer specifying the string ID of the name of the parent struct that this struct derives from ** Field mask count - A 4-byte unsigned integer specifying the number of field masks defined for this derived struct ** Field masks - For each List 3.1 entry: *** Field name string ID - A 4-byte unsigned integer specifying the string ID of the name of the field that this mask applies to *** Mask value - 1-byte either 0x01 for "keep" or 0x02 for "remove" from the parent struct; note that the number of field masks does not always equal the number of fields in the parent struct; if a field in the parent struct does not have an associated field mask, it defaults to "keep" * String entry count - A 4-byte unsigned integer specifying the number of string entries * String entries - For each string entry: ** String ID - A 4-byte unsigned integer that identifies this string entry (and is referenced by the structs above) ** Value - A null-terminated string ** Category - 1 byte with a value between 1 and 5 (inclusive), corresponding to the table below: Strings